package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderDO;
import com.ssy.lingxi.order.entity.OrderProductDO;
import com.ssy.lingxi.order.model.dto.OrderSeparateDTO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderPromotionVO;
import com.ssy.lingxi.order.model.vo.vendor.response.VendorOrderProductPromotionVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 订单商品关联的营销活动相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-09-23
 */
public interface IBaseOrderPromotionService {
    /**
     * （拆单）根据拆单订单商品金额总和，加权平均计算拆单后的营销活动金额
     * @param promotionAmount    订单营销活动金额
     * @param promotionAmountMap 拆单订单商品金额总和
     * @return 拆单订单营销活动金额
     */
    Map<OrderSeparateDTO, BigDecimal> findSeparateOrderPromotionAmount(BigDecimal promotionAmount, Map<OrderSeparateDTO, BigDecimal> promotionAmountMap);

    /**
     * 检查并保存订单商品关联的营销活动
     * @param orderProduct 订单商品
     * @param promotions 营销活动列表
     * @return 操作结果
     */
    Wrapper<Void> checkProductPromotions(OrderProductDO orderProduct, List<OrderPromotionVO> promotions);

    /**
     * 查询订单商品营销活动记录
     * @param orderProduct 订单商品
     * @return 查询结果
     */
    Wrapper<List<VendorOrderProductPromotionVO>> findOrderProductPromotions(OrderProductDO orderProduct);

    /**
     * 查询拼团订单的拼团Id
     * @param order 订单
     * @return 拼团Id
     */
    Long findGroupOrderRecordId(OrderDO order);
}
